package org.example.coursemangementserver.server.service.interfac.student;

import com.baomidou.mybatisplus.extension.service.IService;
import org.example.coursemangementserver.pojo.dto.IDListDTO;
import org.example.coursemangementserver.pojo.dto.UserLoginDTO;
import org.example.coursemangementserver.pojo.dto.UserRegisterDTO;
import org.example.coursemangementserver.pojo.dto.Pagination;
import org.example.coursemangementserver.pojo.dto.course.StudentCommentCourseDTO;
import org.example.coursemangementserver.pojo.dto.course.StudentCourseCommentListQuery.GetStudentCourseCommentListDTO;
import org.example.coursemangementserver.pojo.dto.course.StudentCourseListQuery.GetStudentCourseListDTO;
import org.example.coursemangementserver.pojo.dto.course.StudentCourseSelectListQuery.GetStudentCourseSelectListDTO;
import org.example.coursemangementserver.pojo.dto.course.StudentDropCourseDTO;
import org.example.coursemangementserver.pojo.dto.course.StudentSelectCourseDTO;
import org.example.coursemangementserver.pojo.dto.student.StudentListQuery.GetStudentListDTO;
import org.example.coursemangementserver.pojo.dto.student.StudentNewInfoDTO;
import org.example.coursemangementserver.pojo.entity.Student;
import org.example.coursemangementserver.pojo.vo.UserLoginVO;
import org.example.coursemangementserver.pojo.vo.course.StudentCourseList.StudentCourseListVO;
import org.example.coursemangementserver.pojo.vo.course.StudentSelectCourseList.StudentSelectCourseListVO;
import org.example.coursemangementserver.pojo.vo.course.studentCourseCommentList.StudentCourseCommentListVO;
import org.example.coursemangementserver.pojo.vo.student.StudentAuditingInfoList.StudentAuditingListInfoVO;
import org.example.coursemangementserver.pojo.vo.student.StudentInfoList.StudentListVO;
import org.example.coursemangementserver.pojo.vo.student.StudentInfoVO;

public interface StudentService extends IService<Student> {
    /**
     * 学生登录
     * @param userLoginDTO
     * @return
     */
    UserLoginVO login(UserLoginDTO userLoginDTO);

    /**
     * 学生提交注册申请
     * @param userRegisterDTO
     */
    void register(UserRegisterDTO userRegisterDTO);

    /**
     * 获取学生审核信息
     * @return
     */
    StudentAuditingListInfoVO getStudentAuditing(Pagination pagination);

    /**
     * 获取学生信息列表
     * @param getStudentListDTO
     * @return
     */
    StudentListVO getStudentList(GetStudentListDTO getStudentListDTO);

    /**
     * 获取某个学生的所有可选课程信息列表
     * @param getStudentCourseSelectListDTO
     * @return
     */
    StudentSelectCourseListVO getStudentSelectCourse(GetStudentCourseSelectListDTO getStudentCourseSelectListDTO);

    /**
     * 处理学生选课
     * @param studentSelectCourseDTO
     */
    void studentSelectCourse(StudentSelectCourseDTO studentSelectCourseDTO);

    /**
     * 学生查看自己的课程的请求
     * @param getStudentCourseListDTO
     * @return
     */
    StudentCourseListVO getStudentCourseList(GetStudentCourseListDTO getStudentCourseListDTO);

    /**
     * 学生退课处理
     * @param studentDropCourseDTO
     */
    void studentDropCourse(StudentDropCourseDTO studentDropCourseDTO);

    /**
     * 学生获取已结课的未评价的课程信息
     * @param getStudentCourseListDTO
     * @return
     */
    StudentCourseCommentListVO getStudentCourseCommentList(GetStudentCourseCommentListDTO getStudentCourseListDTO);

    /**
     * 学生评价课程
     * @param studentCommentCourseDTO
     */
    void studentCommentCourse(StudentCommentCourseDTO studentCommentCourseDTO);

    /**
     * 获取学生个人信息
     * @return
     */
    StudentInfoVO getStudentDetail();

    void updateStudentInfo(StudentNewInfoDTO studentNewInfoDTO);

    void selectCourseOnList(IDListDTO idListDTO);

    void studentDropCourseOnList(IDListDTO idListDTO);
}
